/**
 * PrepareSqlRequest类用于封装SQL执行请求。
 * 它包含了一个SQL语句和对应的参数数组。
 */
package cn.org.xuanguang.kepler.hormos.rdb.dsl.sql;

import cn.org.xuanguang.kepler.hormos.rdb.util.SqlUtils;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;

/**
 * 满足Preparestatement方式的SQL请求
 *
 * @author wangg
 * @since 3.0
 */
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor(staticName = "of")
public class PrepareSqlRequest implements SqlRequest {

    private String sql; // SQL语句

    private Object[] parameters; // SQL语句执行时所需的参数

    /**
     * 判断SQL请求是否为空。
     *
     * @return 如果SQL语句为空或者为null，则返回true，否则返回false。
     */
    @Override
    public boolean isEmpty() {
        return sql == null || sql.isEmpty();
    }

    /**
     * 将SQL语句和参数转换为原生SQL字符串。
     *
     * @return 转换后的原生SQL字符串。
     */
    public String toNativeSql() {
        // 利用SqlUtils工具类将SQL语句和参数转换为原生SQL
        return SqlUtils.toNativeSql(sql, parameters);
    }

    /**
     * 重写toString方法，用于返回SQL请求的字符串表示。
     *
     * @return 如果SQL为空，则返回"empty sql"；否则返回转换后的原生SQL字符串。
     */
    @Override
    public String toString() {
        if (isEmpty()) {
            return "empty sql";
        }
        return toNativeSql();
    }
}
